﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAO;

namespace WEB.Conta
{
    public partial class minhasAtividades : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    onload();

                    mtv.SetActiveView(viewInicial);
                }
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }

        #region Funções
        public void onload()
        {
            try
            {
                pesquisar();
            }

            catch (Exception)
            {
                throw;
            }
        }


        public void pesquisar()
        {
            try
            {
                List<AtividadePessoa> listagem = AtividadePessoaDAO.Listar(UsuarioLogado.eventoID, UsuarioLogado.ID, 0);


                var objs = (from a in listagem
                            select new
                            {
                                atividadeID = a.atividadeID,
                                Titulo = a.Atividade.titulo,
                                Papel = a.Papel.descricao,
                                Categoria =a.Atividade.Categoria.descricao
                            }).ToList();

                gvListagem.DataSource = objs;
                gvListagem.DataBind();

            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }
        }

        public void carregaAtividadeSelecionada(int id)
        {
            try
            {
                //AtividadePessoa obj = AtividadePessoaDAO.Selecionar(UsuarioLogado.eventoID, id);

                Atividade objRetornonado = AtividadeDAO.Selecionar(UsuarioLogado.eventoID, id);

                hfAtividadeID.Value = objRetornonado.ID.ToString();

                lblAtividadeSelecionada_Titulo.Text = objRetornonado.titulo;
                lblAtividadeSelecionada_PreRequisitos.Text = objRetornonado.prerequisitos;
                lblAtividadeSelecionada_Descricao.Text = objRetornonado.descricao;

                AtividadePessoa teste =  objRetornonado.AtividadePessoas.Where(a => a.eventoID == objRetornonado.eventoID && a.atividadeID == objRetornonado.ID && a.Papel.descricao.Contains("Autor")).FirstOrDefault();
                if (teste != null)
                {
                    if (teste.Pessoa != null)
                        lblAtividadeSelecionada_Autor.Text = teste.Pessoa.nomeCompleto;
                    else
                        lblAtividadeSelecionada_Autor.Text = "Não informado";
                }

                lblAtividadeSelecionada_Deparatamento.Text = objRetornonado.Departamento.descricao;
                lblAtividadeSelecionada_Categoria.Text = objRetornonado.Categoria.descricao;

                lblAtividadeSelecionada_TotalVagas.Text = objRetornonado.totalVagas.ToString();
                lblAtividadeSelecionada_TotalInscritos.Text  =  (objRetornonado.AtividadePessoas.Select(g => g.eventoID == objRetornonado.eventoID && g.atividadeID == objRetornonado.ID).ToList().Count - 1).ToString();
                lblAtividadeSelecionada_TotalDisponivel.Text = (objRetornonado.totalVagas - (objRetornonado.AtividadePessoas.Select(g => g.eventoID == objRetornonado.eventoID && g.atividadeID == objRetornonado.ID).ToList().Count - 1)).ToString();


                // Verifica se o usuário logado é o autor da atividade
                if (teste != null)
                {
                    if (teste.pessoaID == UsuarioLogado.ID)
                    {
                        listaHistorico(objRetornonado.ID);
                        listaInscritos(objRetornonado.ID);
                    }
                    else
                    {
                        div_listagemHistorico.Visible = false;
                        rptHistorico.DataSource = null;
                        rptHistorico.DataBind();

                        div_listagemInscritos.Visible = false;
                        gvListagemInscritos.DataSource = null;
                        gvListagemInscritos.DataBind();
                    }
                }

                mtv.SetActiveView(viewDetalhes);

            }
            catch (Exception)
            {
                throw;
            }
        }


        public void listaHistorico(int atividadeID)
        {
            try
            {
                List<AtividadeHistorico> listagem = AtividadeHistoricoDAO.Listar(UsuarioLogado.eventoID, atividadeID, 0);

                var objs = (from a in listagem
                            select new
                            {
                                ID = a.ID,
                                Status = a.AtividadeStatu.descricao,
                                Descricao = a.descricao,
                                Data = a.data
                            }).ToList();

                rptHistorico.DataSource = objs;
                rptHistorico.DataBind();

                div_listagemHistorico.Visible = true;

            }
            catch (Exception)
            {
                throw;
            }
        }
        public void listaInscritos(int atividadeID)
        {
            try
            {
                List<AtividadePessoa> listagem = AtividadePessoaDAO.Listar(UsuarioLogado.eventoID, 0, atividadeID);

                //Remove o autor da listagem de inscritos
                AtividadePessoa item = listagem.Where(g => g.Papel.descricao.Contains("Autor")).FirstOrDefault();
                if(item != null)
                    listagem.Remove(item);

                var objs = (from a in listagem
                            select new
                            {
                                ID = a.ID,
                                nomeCompleto = a.Pessoa.nomeCompleto,
                                Papel = a.Papel.descricao
                            }).ToList();

                gvListagemInscritos.DataSource = objs;
                gvListagemInscritos.DataBind();


                div_listagemInscritos.Visible = true;
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion


        #region Eventos do formulario
        #region Grids
        protected void gvListagem_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                lblErro.Text = string.Empty;
                lblSucesso.Text = string.Empty;

                if (e.CommandName.Contains("cmdDetalhes"))
                {
                    int id = Convert.ToInt32(e.CommandArgument);
                    carregaAtividadeSelecionada(id);
                }
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message;
            }


        }
        protected void gvListagem_RowCreated(object sender, GridViewRowEventArgs e)
        {
            // only apply changes if its DataRow
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }
        protected void gvListagemInscritos_RowCreated(object sender, GridViewRowEventArgs e)
        {
            // only apply changes if its DataRow
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }
        #endregion

        #region Btns
        protected void btnVoltar_CLick(object sender, EventArgs e)
        {
            mtv.SetActiveView(viewInicial);
        }
        #endregion
        #endregion
    }
}